ASP.NET Core MVC এবং Web API Test করার পদ্ধতি

Microsoft Technologies - এএসপি ডট নেট কোর (ASP.Net Core) Unit Testing এবং Integration Testing |
200
200

ASP.NET Core অ্যাপ্লিকেশনের জন্য ইউনিট টেস্ট এবং ইন্টিগ্রেশন টেস্ট খুবই গুরুত্বপূর্ণ। এগুলি আপনার অ্যাপ্লিকেশনের কোডের গুণগত মান নিশ্চিত করতে এবং নতুন ফিচার যোগ করার সময় পূর্ববর্তী ফিচারগুলির সঠিকতা বজায় রাখতে সাহায্য করে। এখানে আমরা আলোচনা করব কিভাবে ASP.NET Core MVC এবং Web API টেস্ট করা যায়।


1. ASP.NET Core MVC টেস্ট করা

ASP.NET Core MVC অ্যাপ্লিকেশনের জন্য টেস্ট তৈরি করতে হলে, প্রথমে আপনাকে Unit Test এবং Integration Test কনসেপ্টের মধ্যে পার্থক্য বুঝতে হবে। MVC টেস্টে সাধারণত Controller এর একশন মেথডগুলোর জন্য টেস্ট করা হয়।

1.1 Unit Test তৈরি করা

Unit Testing তে, আমরা নির্দিষ্ট একটি ইউনিট (যেমন Controller, Service) টেস্ট করি। আমরা xUnit বা NUnit টেস্ট ফ্রেমওয়ার্ক ব্যবহার করতে পারি। এখানে xUnit এর উদাহরণ দেওয়া হলো।

  1. xUnit ইনস্টল করা:

    • প্রথমে আপনার টেস্ট প্রজেক্টে xUnit প্যাকেজ ইনস্টল করতে হবে।
    dotnet add package xunit
    dotnet add package Microsoft.AspNetCore.Mvc.Testing
    dotnet add package Moq
    
  2. Controller Test করা:

    • MVC Controller-এ যে ফিচার টেস্ট করতে চান তার জন্য একটি টেস্ট ক্লাস তৈরি করুন।

    উদাহরণস্বরূপ, যদি আপনি HomeController টেস্ট করতে চান:

    public class HomeControllerTests
    {
        private readonly HomeController _controller;
        private readonly Mock<IProductService> _mockService;
    
        public HomeControllerTests()
        {
            _mockService = new Mock<IProductService>();
            _controller = new HomeController(_mockService.Object);
        }
    
        [Fact]
        public async Task Index_ReturnsAViewResult_WithAListOfProducts()
        {
            // Arrange
            _mockService.Setup(service => service.GetProducts())
                        .ReturnsAsync(new List<Product> { new Product { Id = 1, Name = "Product 1" } });
    
            // Act
            var result = await _controller.Index();
    
            // Assert
            var viewResult = Assert.IsType<ViewResult>(result);
            var model = Assert.IsAssignableFrom<List<Product>>(viewResult.ViewData.Model);
            Assert.Single(model);
        }
    }
    

    এখানে, Moq ব্যবহার করে IProductService এর মক তৈরি করা হয়েছে এবং HomeController এর Index একশন টেস্ট করা হয়েছে।

1.2 Integration Test তৈরি করা

Integration Test-এ, আমরা পুরো অ্যাপ্লিকেশন বা কন্ট্রোলার ইন্টিগ্রেশন টেস্ট করি। ASP.NET Core-এ WebApplicationFactory ব্যবহার করে Integration Test করা হয়।

  1. WebApplicationFactory ইনস্টল করা: Web API টেস্টের মতো MVC টেস্টের জন্যও Microsoft.AspNetCore.Mvc.Testing প্যাকেজ ইনস্টল করতে হবে।
  2. Integration Test উদাহরণ:

    public class HomeControllerIntegrationTests : IClassFixture<WebApplicationFactory<Startup>>
    {
        private readonly WebApplicationFactory<Startup> _factory;
    
        public HomeControllerIntegrationTests(WebApplicationFactory<Startup> factory)
        {
            _factory = factory;
        }
    
        [Fact]
        public async Task Index_ReturnsSuccessStatusCode()
        {
            // Arrange
            var client = _factory.CreateClient();
    
            // Act
            var response = await client.GetAsync("/Home/Index");
    
            // Assert
            response.EnsureSuccessStatusCode();
        }
    }
    

    এখানে, WebApplicationFactory ব্যবহার করে আমরা পুরো অ্যাপ্লিকেশনকে মক করে HomeController এর Index একশন টেস্ট করেছি।


2. ASP.NET Core Web API টেস্ট করা

ASP.NET Core Web API এর জন্য Integration Test তৈরি করা হয়, যাতে API এর রেসপন্স, স্ট্যাটাস কোড, এবং কনটেন্ট টেস্ট করা যায়। আমরা xUnit, Microsoft.AspNetCore.Mvc.Testing, এবং HttpClient ব্যবহার করব।

2.1 Web API Integration Test তৈরি করা

  1. API টেস্ট তৈরি করা: Web API এর টেস্টে, সাধারণত HttpClient ব্যবহার করে API রিকোয়েস্ট করা হয় এবং রেসপন্স চেক করা হয়।
  2. API Controller Test উদাহরণ:

    public class ProductsControllerTests : IClassFixture<WebApplicationFactory<Startup>>
    {
        private readonly WebApplicationFactory<Startup> _factory;
    
        public ProductsControllerTests(WebApplicationFactory<Startup> factory)
        {
            _factory = factory;
        }
    
        [Fact]
        public async Task GetProducts_ReturnsOkResponse()
        {
            // Arrange
            var client = _factory.CreateClient();
    
            // Act
            var response = await client.GetAsync("/api/products");
    
            // Assert
            response.EnsureSuccessStatusCode();
            var products = await response.Content.ReadAsStringAsync();
            Assert.Contains("Product", products);
        }
    }
    

    এখানে, আমরা WebApplicationFactory ব্যবহার করে API কল করলাম এবং GetAsync মেথড ব্যবহার করে Products API টেস্ট করলাম।

2.2 Mocking External Dependencies

অনেক সময়, Web API এর Controller গুলি এক্সটার্নাল সার্ভিস বা ডেটাবেসের সাথে যোগাযোগ করতে পারে। এই ধরনের ডিপেনডেন্সি মক করা গুরুত্বপূর্ণ। নিচে Moq ব্যবহার করে মক করা উদাহরণ দেখানো হলো।

public class ProductsControllerTests
{
    private readonly ProductsController _controller;
    private readonly Mock<IProductService> _mockService;

    public ProductsControllerTests()
    {
        _mockService = new Mock<IProductService>();
        _controller = new ProductsController(_mockService.Object);
    }

    [Fact]
    public async Task GetProduct_ReturnsOkResult_WithProduct()
    {
        // Arrange
        _mockService.Setup(service => service.GetProduct(1))
                    .ReturnsAsync(new Product { Id = 1, Name = "Product 1" });

        // Act
        var result = await _controller.GetProduct(1);

        // Assert
        var actionResult = Assert.IsType<ActionResult<Product>>(result);
        var okResult = Assert.IsType<OkObjectResult>(actionResult.Result);
        var product = Assert.IsType<Product>(okResult.Value);
        Assert.Equal(1, product.Id);
    }
}

এখানে, IProductService এর মক তৈরি করা হয়েছে এবং ProductsController এর GetProduct একশন টেস্ট করা হয়েছে।


3. ASP.NET Core MVC এবং Web API টেস্টে কিছু গুরুত্বপূর্ণ টিপস

  • ডেটাবেস মকিং: যদি আপনার API বা Controller ডেটাবেসের সাথে কাজ করে, তাহলে InMemory Database বা Moq ব্যবহার করে ডেটাবেস মক করতে পারেন।
  • Auth Token: যদি API অথেনটিকেশন ব্যবহার করে, তাহলে টেস্টে JWT বা Cookies মক করতে হবে।
  • Test Coverage: নিশ্চিত করুন যে আপনার টেস্ট কাভারেজ যথেষ্ট, বিশেষ করে রিকোয়েস্ট, রেসপন্স, এবং স্ট্যাটাস কোড চেক করা।
  • Test Isolation: টেস্টগুলি একে অপর থেকে বিচ্ছিন্ন থাকতে হবে, অর্থাৎ একটি টেস্টের ফলাফল অন্য টেস্টের ওপর প্রভাব ফেলবে না।

সারাংশ

ASP.NET Core MVC এবং Web API টেস্ট করার জন্য, আপনাকে Unit Test এবং Integration Test এর মধ্যে পার্থক্য বুঝতে হবে। xUnit এবং Moq এর মতো টেস্ট ফ্রেমওয়ার্ক ব্যবহার করে আপনি Controller এর একশন টেস্ট করতে পারেন এবং WebApplicationFactory ব্যবহার করে আপনি পুরো API বা MVC অ্যাপ্লিকেশন ইন্টিগ্রেশন টেস্ট করতে পারেন। টেস্ট করা আপনাকে অ্যাপ্লিকেশন উন্নয়নে সহায়তা করবে এবং কোডের সঠিকতা নিশ্চিত করবে।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion